import { IPSDELogicNode } from './ipsdelogic-node';
import { IPSDELogicParam } from './ipsdelogic-param';

/**
 *
 * 继承父接口类型值[MERGEPARAM]
 * @export
 * @interface IPSDEMergeParamLogic
 */
export interface IPSDEMergeParamLogic extends IPSDELogicNode {
  getCopyFields(): string[] | null;

  get copyFields(): string[] | null;

  /**
   * 目标逻辑参数对象
   *
   * @type {IPSDELogicParam}
   */
  getDstPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 目标逻辑参数对象
   *
   * @type {IPSDELogicParam}
   */
  get dstPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 目标逻辑参数对象（必须存在）
   *
   * @type {IPSDELogicParam}
   */
  getDstPSDELogicParamMust(): IPSDELogicParam;

  /**
   * 目标参数合并属性
   * @type {string}
   */
  dstParamMergeField: string;

  /**
   * 合并模式
   * @description 值模式 [实体逻辑合并数据参数模式] {DEFAULT：默认（合并到目标参数，不存在时忽略）、 UNION：全集（合并到目标参数，不存在时新建）、 INTERSECTION：交集（合并源和目标重复出现的数据）、 DEFFERENCE：差集（合并源和目标没有重复出现的数据） }
   * @type {( string | 'DEFAULT' | 'UNION' | 'INTERSECTION' | 'DEFFERENCE')}
   */
  mergeMode: string | 'DEFAULT' | 'UNION' | 'INTERSECTION' | 'DEFFERENCE';

  /**
   * 返回值绑定逻辑参数对象
   *
   * @type {IPSDELogicParam}
   */
  getRetPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 返回值绑定逻辑参数对象
   *
   * @type {IPSDELogicParam}
   */
  get retPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 返回值绑定逻辑参数对象（必须存在）
   *
   * @type {IPSDELogicParam}
   */
  getRetPSDELogicParamMust(): IPSDELogicParam;

  /**
   * 源逻辑参数对象
   *
   * @type {IPSDELogicParam}
   */
  getSrcPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 源逻辑参数对象
   *
   * @type {IPSDELogicParam}
   */
  get srcPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 源逻辑参数对象（必须存在）
   *
   * @type {IPSDELogicParam}
   */
  getSrcPSDELogicParamMust(): IPSDELogicParam;

  /**
   * 源参数合并属性
   * @type {string}
   */
  srcParamMergeField: string;

  /**
   * 仅拷贝不存在属性
   * @type {boolean}
   * @default false
   */
  copyIfNotExists: boolean;

  /**
   * 合并到指定属性
   * @type {boolean}
   * @default false
   */
  mergeIntoField: boolean;
}
